1053ede3ebd65344bfa061f54c5ed736f523c9e3,subprojects/model-core/src/main/java/org/gradle/model/internal/inspect/ManagedModelCreationRuleExtractor.java,ManagedModelCreationRuleExtractor,buildModelCreatorForManagedType,#ModelType#MethodRuleDefinition#ModelPath#,66
Before Change
List<ModelReference<?>> inputs = bindings.subList(1, bindings.size());
ModelRuleDescriptor descriptor = ruleDefinition.getDescriptor();
return ManagedModelCreators.creator(descriptor, modelPath, modelSchema, inputs, new RuleMethodBackedMutationAction<T>(ruleDefinition.getRuleInvoker()));
}
private <T> ModelSchema<T> getModelSchema(ModelType<T> managedType, MethodRuleDefinition<?, ?> ruleDefinition) {
After Change
return new ExtractedModelCreator(buildModelCreatorForManagedType(managedType, ruleDefinition, ModelPath.path(modelName)));
}
private <T> ModelCreator buildModelCreatorForManagedType(ModelType<T> managedType, final MethodRuleDefinition<?, ?> ruleDefinition, ModelPath modelPath) {
ModelSchema<T> modelSchema = getModelSchema(managedType, ruleDefinition);
if (modelSchema.getKind().equals(ModelSchema.Kind.VALUE)) {
throw new InvalidModelRuleDeclarationException(ruleDefinition.getDescriptor(), "a void returning model element creation rule cannot take a value type as the first parameter, which is the element being created. Return the value from the method.");
}
if (!modelSchema.getKind().isManaged()) {
String description = "a void returning model element creation rule has to take an instance of a managed type as the first argument";
throw new InvalidModelRuleDeclarationException(ruleDefinition.getDescriptor(), description);
}
List<ModelReference<?>> bindings = ruleDefinition.getReferences();
List<ModelReference<?>> inputs = bindings.subList(1, bindings.size());
ModelRuleDescriptor descriptor = ruleDefinition.getDescriptor();
final ModelReference<T> reference = ModelReference.of(modelPath, managedType);
return ModelCreators.of(modelPath, modelSchema.getNodeInitializer())
.descriptor(descriptor)
.action(ModelActionRole.Initialize, InputUsingModelAction.of(
reference, descriptor, inputs, new RuleMethodBackedMutationAction<T>(ruleDefinition.getRuleInvoker())
)
)
.build();
}
private <T> ModelSchema<T> getModelSchema(ModelType<T> managedType, MethodRuleDefinition<?, ?> ruleDefinition) {